package tpf.designer.pattern.course6.behavior_pattern1.template_18;

import org.apache.log4j.Logger;

public abstract class AbstractTemplate {

    public static final Logger LOGGER = Logger.getLogger(AbstractTemplate.class);

    /**
     * 模板方法
     */
    public void templateMethod(){
        //调用基本方法
        abstractMethod();
        hookMethod();
        concreteMethod();
    }

    /**
     * 基本方法的声明（由子类实现）
     */
    protected abstract void abstractMethod();
    /**
     * 基本方法(空方法)
     */
    protected void hookMethod(){
        LOGGER.info("AbstractTemplate ----> hookMethod()");
    }
    /**
     * 基本方法（已经实现）
     */
    private final void concreteMethod(){
        //业务相关的代码
        LOGGER.info("AbstractTemplate ----> concreteMethod()");
    }
}
